파 이 썬 파충류 가방 BeautifulSoup  재 귀적 캡 처 실례 상세 설명

파 이 썬 파충류 가방 BeautifulSoup  재 귀적 캡 처 실례 상세 설명
개요:
파충류 의 주요 목적 은 인터넷 을 따라 필요 한 내용 을 잡기 위 한 것 이다.그것들의 본질은 일종 의 귀속 과정 이다.그들 은 먼저 웹 페이지 의 내용 을 얻 은 다음 에 페이지 의 내용 을 분석 하고 다른 URL 을 찾 은 다음 에 이 URL 의 페이지 내용 을 얻 고 이 과정 을 계속 반복 해 야 한다.
위 키 피 디 아 를 예 로 들 자.
우 리 는 위 키 피 디 아 에서 케 빈 베 켄 단어 에서 다른 단 어 를 가리 키 는 모든 링크 를 추출 하고 싶 습 니 다.

# -*- coding: utf-8 -*-
# @Author: HaonanWu
# @Date:  2016-12-25 10:35:00
# @Last Modified by:  HaonanWu
# @Last Modified time: 2016-12-25 10:52:26
from urllib2 import urlopen
from bs4 import BeautifulSoup

html = urlopen('http://en.wikipedia.org/wiki/Kevin_Bacon')
bsObj = BeautifulSoup(html, "html.parser")

for link in bsObj.findAll("a"):
  if 'href' in link.attrs:
    print link.attrs['href']

위의 이 코드 는 페이지 의 모든 하이퍼링크 를 추출 할 수 있다.

/wiki/Wikipedia:Protection_policy#semi
#mw-head
#p-search
/wiki/Kevin_Bacon_(disambiguation)
/wiki/File:Kevin_Bacon_SDCC_2014.jpg
/wiki/San_Diego_Comic-Con
/wiki/Philadelphia
/wiki/Pennsylvania
/wiki/Kyra_Sedgwick
우선 추출 한 URL 이 중 복 될 수 있 습 니 다.
그 다음 에 일부 URL 은 우리 가 필요 로 하지 않 는 것 이다.예 를 들 어 사 이 드 바,머 릿 말,꼬 릿 말,디 렉 터 리 바 링크 등 이다.
그래서 관찰 을 통 해 우 리 는 모든 가리 키 는 단어 페이지 의 링크 가 세 가지 특징 을 가지 고 있다 는 것 을 알 수 있다.
  • id 가 body Content 인 div 태그 에 있 습 니 다
  • URL 링크 에 콜론 이 포함 되 어 있 지 않 음
  • URL 링크 는 모두/wiki/로 시작 하 는 상대 경로 입 니 다.
  • 
    from urllib2 import urlopen
    from bs4 import BeautifulSoup
    import datetime
    import random
    import re
    
    pages = set()
    random.seed(datetime.datetime.now())
    def getLinks(articleUrl):
      html = urlopen("http://en.wikipedia.org"+articleUrl)
      bsObj = BeautifulSoup(html, "html.parser")
      return bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
    
    links = getLinks("/wiki/Kevin_Bacon")
    while len(links) > 0:
      newArticle = links[random.randint(0, len(links)-1)].attrs["href"]
      if newArticle not in pages:
        print(newArticle)
        pages.add(newArticle)
        links = getLinks(newArticle)
    
    
    그 중에서 getLinks 의 인 자 는/wiki/<단어 이름>이 고 위 키 백과 의 절대 경로 와 합 쳐 페이지 의 URL 을 얻 을 수 있 습 니 다.정규 표현 식 을 통 해 다른 단 어 를 가리 키 는 모든 URL 을 캡 처 하고 주 함수 에 되 돌려 줍 니 다.
    주 함 수 는 재 귀적 getlinks 를 호출 하여 방문 하지 않 은 URL 에 무 작위 로 접근 합 니 다.단어 가 없 거나 주동 적 으로 멈 출 때 까지.
    이 코드 는 위 키 피 디 아 전 체 를 캡 처 할 수 있다.
    
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    
    pages = set()
    def getLinks(pageUrl):
      global pages
      html = urlopen("http://en.wikipedia.org"+pageUrl)
      bsObj = BeautifulSoup(html, "html.parser")
      try:
        print(bsObj.h1.get_text())
        print(bsObj.find(id ="mw-content-text").findAll("p")[0])
        print(bsObj.find(id="ca-edit").find("span").find("a").attrs['href'])
      except AttributeError:
        print("This page is missing something! No worries though!")
    
      for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
          if link.attrs['href'] not in pages:
            #We have encountered a new page
            newPage = link.attrs['href']
            print("----------------
    "+newPage) pages.add(newPage) getLinks(newPage) getLinks("")
    일반적으로 Python 의 귀속 제한 은 1000 회 이기 때문에 인위적으로 비교적 큰 귀속 계산 기 를 설치 하거나 다른 수단 으로 코드 를 1000 회 교체 한 후에 도 실행 할 수 있 도록 해 야 한다.
    읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기